#include "bits/stdc++.h"
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
#define ll long long
#define ld long double
#define pii pair<int, int>
#define pll pair<long long, long long>
#define pipii pair<int, pair<int, int>>
#define plpll pair<long long, pair<long long, long long>>
#define vvi vector<vector<int>>
#define vvl vector<vector<long long>>
#define vii vector<pii>
#define vll vector<pll>
#define vl vector<long long>
#define vi vector<int>
#define pb push_back
#define mp make_pair
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define endl "\n"
#define rsz resize
#define sz(a) ((int)(a).size())
typedef tree<long long, null_type, less<long long>, rb_tree_tag, tree_order_statistics_node_update > oset; // find_by_order, order_of_key
#define fbo find_by_order
#define ook order_of_key
#define bitcount __builtin_popcount
#ifdef Etherite_Local
#define DBG1(x) cerr << (#x) << ": " << (x) << endl;
#define DBG2(x, y) cerr << (#x) << " " << (#y) << ": " << (x) << " " << y << endl;
#define DBG3(x, y, z) cerr << (#x) << " " << (#y) << " " << (#z) << ": " << (x) << " " << y << " " << z << endl;
#define DBG4(a, b, c, d) cerr << (#a) << " " << (#b) << " " << (#c) << " " << (#d) << ": " << a << " " << b << " " << c << " " << d << endl;
#define DBG5(a, b, c, d, e) cerr << (#a) << " " << (#b) << " " << (#c) << " " << (#d) << " " << (#e) << ": " << a << " " << b << " " << c << " " << d << " " << e << endl;
#define DBG6(a, b, c, d, e, f) cerr << (#a) << " " << (#b) << " " << (#c) << " " << (#d) << " " << (#e) << " " << (#f) << ": " << a << " " << b << " " << c << " " << d << " " << e << " " << f << endl;
template<class T> void DBGpair(T a, string s = "") {cerr << s << (s == ""? "" : ": ") << a.first << ", " << a.second << endl;}
template <class T> void DBGvec(vector<T> a){for(T i : a) cerr << i << " "; cerr << endl;}
template <class T> void DBGset(set<T> a){for(T i : a) cerr << i << " "; cerr << endl;}
mt19937 rnd(228);
#else
#define DBG1(x)
#define DBG2(x, y)
#define DBG3(x, y, z)
#define DBG4(a, b, c, d)
#define DBG5(a, b, c, d, e)
#define DBG6(a, b, c, d, e, f)
template<class T> void DBGpair(T a, string s = "") {return;}
template <class T> void DBGvec(vector<T> &a){}
template <class T> void DBGset(set<T> &a){}
mt19937 rnd(chrono::high_resolution_clock::now().time_since_epoch().count());
#endif
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
char dir[] = {'R', 'L', 'D', 'U'};
const int MOD = 1e9 + 7;
long long binpow(long long a, long long b, long long m = 1e9 + 7)
{
a %= m;
long long res = 1;
while(b > 0)
{
if(b & 1) res = res * a % m;
a = a * a % m;
b >>= 1;
}
return res;
}
long long modinv(long long a, long long m = 1e9 + 7)
{
return binpow(a, m - 2, m);
}
ll add(ll a, ll b) {return (a + b) % MOD;}
ll sub(ll a, ll b)
{
ll x = a - b;
while(x < 0) x += MOD;
return x;
}
ll mul(ll a, ll b) {return (a * b) % MOD;}
ll divi(ll a, ll b) {return (a * modinv(b, MOD)) % MOD;}
void setIO(string filename)
{
if(fopen((filename + ".in").c_str(), "r"))
{
freopen((filename + ".in").c_str(), "r", stdin);
freopen((filename + ".out").c_str(), "w", stdout);
}
}
void solve()
{
/* dp[i][no change / higher]
last stayed same, different from current:
if(a[i] != a[i - 1]) dp[i][nc] = dp[i - 1][nc];
last stayed same, equal to current:
if(a[i] == a[i - 1]) dp[i][h] = dp[i - 1][nc] + 1;
last is 1 higher than second last, different from current:
if(a[i - 2] + 1 != a[i]) dp[i][nc] = dp[i - 1][h];
last is 1 higher than second last, same as current:
if(a[i - 1] + 1 == a[i]) dp[i][h] = dp[i - 1][h] + 1;
*/
int n; cin >> n;
vl a(n + 1), c(n + 1);
for(int i = 1; i <= n; i++) cin >> a[i] >> c[i];
vvl dp(n + 10, vl(3, 1e18));
dp[1][0] = 0;
dp[1][1] = c[1];
dp[1][2] = 2 * c[1];
for(int i = 2; i <= n; i++)
{
for(int j = 0; j <= 2; j++)
{
for(int k = 0; k <= 2; k++)
{
if(a[i] + j == a[i - 1] + k) continue;
dp[i][j] = min(dp[i][j], dp[i - 1][k] + c[i] * j);
}
}
}
cout << min({dp[n][0], dp[n][1], dp[n][2]}) << endl;
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0);
int t = 1;
cin >> t;
for(int i = 1; i <= t; i++) solve();
return 0;
}
1356. Sort Integers by The Number of 1 Bits | 922. Sort Array By Parity II |
344. Reverse String | 1047. Remove All Adjacent Duplicates In String |
977. Squares of a Sorted Array | 852. Peak Index in a Mountain Array |
461. Hamming Distance | 1748. Sum of Unique Elements |
897. Increasing Order Search Tree | 905. Sort Array By Parity |
1351. Count Negative Numbers in a Sorted Matrix | 617. Merge Two Binary Trees |
1450. Number of Students Doing Homework at a Given Time | 700. Search in a Binary Search Tree |
590. N-ary Tree Postorder Traversal | 589. N-ary Tree Preorder Traversal |
1299. Replace Elements with Greatest Element on Right Side | 1768. Merge Strings Alternately |
561. Array Partition I | 1374. Generate a String With Characters That Have Odd Counts |
1822. Sign of the Product of an Array | 1464. Maximum Product of Two Elements in an Array |
1323. Maximum 69 Number | 832. Flipping an Image |
1295. Find Numbers with Even Number of Digits | 1704. Determine if String Halves Are Alike |
1732. Find the Highest Altitude | 709. To Lower Case |
1688. Count of Matches in Tournament | 1684. Count the Number of Consistent Strings |